/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package gestionnaires;

import java.util.ArrayList;
import java.util.Collection;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import modeles.Commande;
import modeles.LigneCommande;
import modeles.Panier;
import modeles.Produit;
import modeles.Utilisateur;

/**
 *
 * @author Christian
 */
@Stateless
public class GestionnaireCommande {
    @EJB
    private GestionnaireLigneCommande gestionnaireLigneCommande;
    @EJB
    private GestionnaireUtilisateurs gestionnaireUtilisateurs;
    @PersistenceContext
    private EntityManager em;
    
    public Commande creeCommande(Utilisateur utilisateur, Panier p) {
         ArrayList<Produit> produitsPanier = new ArrayList<Produit>(p.getProduits());
         ArrayList<LigneCommande> lignesCommandes = new ArrayList<LigneCommande>();
         for(int i=0;i<produitsPanier.size();i++)
             lignesCommandes.add(new LigneCommande(produitsPanier.get(i),p.getQuantite(produitsPanier.get(i))));
         Commande c = new Commande(utilisateur, lignesCommandes);
         em.persist(c);
        return c;
    }
    
     public Collection<Commande> getAllCommandes() {
        Query q = em.createQuery("select o from Commande o", Commande.class);
        return q.getResultList();
    }
     
    public Collection<Commande> getAllCommandesByUtilisateur(int idUtilisateur) {
        Query q = em.createQuery("select o from Commande o where o.utilisateur.id=" + idUtilisateur, Commande.class);
        return q.getResultList();
    }
    public boolean hasCommandesUtilisateur(int idUtilisateur) {
        Query q = em.createQuery("select Count(o) from Commande o where o.utilisateur.id=" + idUtilisateur, Commande.class);
        if(((Long) q.getResultList().get(0)) <= 0) 
               return false;
        else return true;
    }
     

     public Collection<Commande> getAllCommandesByUtilisateur(String emailUtilisateur) {
        Utilisateur utilisateur = gestionnaireUtilisateurs.getUserByEmail(emailUtilisateur);
        if(utilisateur == null)
            return new ArrayList<Commande>();
        return getAllCommandesByUtilisateur(utilisateur.getId());
    }
     
    public Commande getCommandeById(int id) {
        Query q = em.createQuery("select o from Commande o where o.id=" + id, Commande.class);
        if(q.getResultList().size() <= 0) return null;
        return (Commande) q.getResultList().get(0);
    }
}
